# -*- coding: utf-8 -*-
import scrapy
from AQI.items import AqiItem

class AqiSpider(scrapy.Spider):
    name = 'aqi'
    allowed_domains = ['aqistudy.cn']

    base_url = 'https://www.aqistudy.cn/historydata/'
    start_urls = [base_url]

    # 第一层 获取所有的城市列表
    def parse(self, response):
        # 城市名字
        city_name_list = response.xpath('/html/body/div[3]/div/div[1]/div[2]/div[2]/ul/div[2]/li/a/text()').extract()[4:5]
        # 城市url
        city_link_list = response.xpath('/html/body/div[3]/div/div[1]/div[2]/div[2]/ul/div[2]/li/a/@href').extract()[4:5]

        for city_name, city_link in zip(city_name_list, city_link_list):
            item = AqiItem()
            item['city_name'] = city_name

            print(item)
            city_url = self.base_url + city_link

            yield scrapy.Request(city_url, callback=self.parse_month, meta={'aqi': item})

    # 第二层 获取当前城市所有月份
    def parse_month(self, response):
        # 接收 从城市列表 传入的 item
        item = response.meta['aqi']
        month_link_list = response.xpath('html/body/div[3]/div[1]/div[1]/table/tbody/tr/td/a/@href').extract()

        for month_link in month_link_list:
            month_url = self.base_url + month_link

            yield scrapy.Request(month_url, callback=self.parse_day, meta={'aqi': item})

    def parse_day(self, response):
        # 接收从第二层 月份列表 传入的 item
        item = response.meta['aqi']
        # 获取当前的城市名字 日期 质量等级
        tr_list = response.xpath('//tr')
        # 删除第一行
        tr_list.pop(0)

        for tr in tr_list:

            # 日期
            item['date'] = tr.xpath('td[1]/text()').extract_first()
            # 质量等级
            item['level'] = tr.xpath('td[3]//text()').extract_first()

            print(item)
            yield item









